from mcp.server.fastmcp import FastMCP, Context
import subprocess
import json

mcp = FastMCP("Mate System Monitor MCP Server")

"""
面向软件：mate-system-monitor

MCP tools 列表：
1. mate_system_monitor_help - 显示 mate-system-monitor 的帮助信息
   参数：无
   返回：执行结果 JSON

2. mate_system_monitor_show_system - 显示系统标签页
   参数：无
   返回：执行结果 JSON

3. mate_system_monitor_show_processes - 显示进程标签页
   参数：无
   返回：执行结果 JSON

4. mate_system_monitor_show_resources - 显示资源标签页
   参数：无
   返回：执行结果 JSON

5. mate_system_monitor_show_file_systems - 显示文件系统标签页
   参数：无
   返回：执行结果 JSON
"""

@mcp.tool()
def mate_system_monitor_help():
    """
    显示 mate-system-monitor 命令的帮助信息
    
    返回：
        dict: 包含执行结果的 JSON 结构
        {
            "success": bool,    # 是否执行成功
            "command": str,     # 执行的命令
            "exit_code": int,   # 退出码
            "stdout": str,      # 标准输出
            "stderr": str       # 标准错误
        }
    """
    result = subprocess.run(
        ["mate-system-monitor", "--help"],
        capture_output=True,
        text=True
    )
    
    return {
        "success": result.returncode == 0,
        "command": "mate-system-monitor --help",
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def mate_system_monitor_show_system():
    """
    启动 mate-system-monitor 并显示系统标签页
    
    返回：
        dict: 包含执行结果的 JSON 结构
        {
            "success": bool,    # 是否执行成功
            "command": str,     # 执行的命令
            "exit_code": int,   # 退出码
            "stdout": str,      # 标准输出
            "stderr": str       # 标准错误
        }
    """
    result = subprocess.run(
        ["mate-system-monitor", "-s"],
        capture_output=True,
        text=True
    )
    
    return {
        "success": result.returncode == 0,
        "command": "mate-system-monitor -s",
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def mate_system_monitor_show_processes():
    """
    启动 mate-system-monitor 并显示进程标签页
    
    返回：
        dict: 包含执行结果的 JSON 结构
        {
            "success": bool,    # 是否执行成功
            "command": str,     # 执行的命令
            "exit_code": int,   # 退出码
            "stdout": str,      # 标准输出
            "stderr": str       # 标准错误
        }
    """
    result = subprocess.run(
        ["mate-system-monitor", "-p"],
        capture_output=True,
        text=True
    )
    
    return {
        "success": result.returncode == 0,
        "command": "mate-system-monitor -p",
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def mate_system_monitor_show_resources():
    """
    启动 mate-system-monitor 并显示资源标签页
    
    返回：
        dict: 包含执行结果的 JSON 结构
        {
            "success": bool,    # 是否执行成功
            "command": str,     # 执行的命令
            "exit_code": int,   # 退出码
            "stdout": str,      # 标准输出
            "stderr": str       # 标准错误
        }
    """
    result = subprocess.run(
        ["mate-system-monitor", "-r"],
        capture_output=True,
        text=True
    )
    
    return {
        "success": result.returncode == 0,
        "command": "mate-system-monitor -r",
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def mate_system_monitor_show_file_systems():
    """
    启动 mate-system-monitor 并显示文件系统标签页
    
    返回：
        dict: 包含执行结果的 JSON 结构
        {
            "success": bool,    # 是否执行成功
            "command": str,     # 执行的命令
            "exit_code": int,   # 退出码
            "stdout": str,      # 标准输出
            "stderr": str       # 标准错误
        }
    """
    result = subprocess.run(
        ["mate-system-monitor", "-f"],
        capture_output=True,
        text=True
    )
    
    return {
        "success": result.returncode == 0,
        "command": "mate-system-monitor -f",
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

if __name__ == "__main__":
    mcp.run()